﻿using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using TTGame;
using CinemaDirector;

/*
 * BuffTrigger
 *
 * 技能触发时直接释放Buff。
 *
 * Buff一般是放在子弹上。技能触发Buff的时候，需要明确的目标。
 * 所以，技能直接触发Buff仅接受以下类型：
 * SkillSelectorType.Lock           对选定的目标释放Buff
 * SkillSelectorType.SelfCenter     对自己释放Buff。如果是对自身周围释放Buff，应另外增加圆形攻击框，在攻击框上带Buff。
 *
 *
 *
 * 依赖：
 *
 * ！不写重复代码！
 * @author TTun
 * @date 8/3/2017 9:05:01 PM
 */
namespace TTGameEngine {

[CutsceneItemAttribute("LT Trigger", "LT Buff Trigger", CutsceneItemGenre.ActorItem)]
public class BuffTrigger : CinemaActorEvent {
    [Tooltip("绑定到技能，让之后的触发框使用")]
    public int buffID = 0;

    public override void Trigger(GameObject actor) {
        SkillTL skill = this.GetSkill();
        //fixed:停止技能脚本时，脚本上所有剩余的触发器都会触发一次。
        if (skill.IsStopped()) { return; }
        //get target obj
        Puppet obj = actor.GetComponent<Puppet>();
        BuffTrigger.TriggerBuff(obj, skill, buffID);
    }

    public static void TriggerBuff(Puppet obj, SkillTL skill, int buffID) {
        float triggerRate = skill.m_skillData.GetBuffTriggerRate(buffID);
        if(Tools.IsHitRate(triggerRate) == false) {
            //buff 触发概率不通过
            return;
        }

        SkillSelectorType selType = skill.GetSelectorType();
        TargetTypeID targetType = BuffManager.Share().GetBuffData(buffID).targetType;

        if(targetType.IsID((int)TargetSelectType.Self)) {
            //仅对自己施法，直接处理
            obj.AddBuff(buffID, obj.GetGID(), obj.CampID, skill.SkillID, skill.SkillCastID);
        }
        if(selType == SkillSelectorType.Lock) {
            //对已选定的目标施法。
            //判断目标阵营。
            string targetObjGID = skill.m_selector.ResultLockObjGID;
            Puppet targetObj = ObjectManager.Share().GetObjectWithGID(targetObjGID);
            targetObj.AddBuff(buffID, obj.GetGID(), obj.CampID, skill.SkillID, skill.SkillCastID);
        }

        //仅仅是Self类型的话，就直接释放，不再给后面的触发框使用了。
        if(false == targetType.IsID((int)TargetSelectType.Self)) {
            skill.SkillLogicHandler.BindSkillBuff(buffID);
        }
    }

}

}
